]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
st/theme-node-drawing: Fix corner pipeline leak
authorJonas Ådahl <jadahl@gmail.com>
Mon, 15 Jul 2024 19:28:58 +0000 (21:28 +0200)
committerRobert Mader <robert.mader@posteo.de>
Mon, 19 Aug 2024 11:47:32 +0000 (11:47 +0000)
The corner pipelines state theme node paint state was not necessarily
free of existing pipelines, so make sure to free them before looking up
new ones.

This avoids leaking thousands of CoglPipeline instances after toggling
the overview a bunch of times.

Fixes: e1868cab1a ("st/theme-node-drawing: Factor in border radius in update_resources()")
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3421>

src/st/st-theme-node-drawing.c

index 778ebd9bdf35c485755032c23118ad9db361ba35..5933b3a3bc8e296d1439e026beee219ba9050dad 100644 (file)
@@ -1374,6 +1374,7 @@ st_theme_node_maybe_prerender_background (StThemeNodePaintState *state,
   gboolean has_inset_box_shadow;
   gboolean has_large_corners;
   StShadow *box_shadow_spec;
+  StCorner corner_id;
 
   box_shadow_spec = st_theme_node_get_box_shadow (node);
 
@@ -1416,6 +1417,9 @@ st_theme_node_maybe_prerender_background (StThemeNodePaintState *state,
     }
   }
 
+  for (corner_id = 0; corner_id < 4; corner_id++)
+    g_clear_object (&state->corner_pipeline[corner_id]);
+
   state->corner_pipeline[ST_CORNER_TOPLEFT] =
     st_theme_node_lookup_corner (node, width, height, resource_scale, ST_CORNER_TOPLEFT);
   state->corner_pipeline[ST_CORNER_TOPRIGHT] =